@南馆潇湘
2年前 提问
1个回答

KVM中vCPU在哪几种模式下执行

GQQQy
2年前

KVM中vCPU在三种模式下执行:

  • 客户模式(Guest Mode)运行GuestOS,执行Guest非IO操作指令。

  • 用户模式(User Mode)运行QEMU,实现IO模拟与管理。

  • 内核模式(Kernel Mode)运行KVM内核,实现模式的切换(VM Exit/VM Entry),执行特权与敏感指令。

KVM内核加载时执行VMXON指令进入VMX操作模式,VMM进入VMX Root模式,可执行VMXOFF指令退出。GuestOS执行特权或敏感指令时触发VM Exit,系统挂起GuestOS通过VMCALL调用VMM,切换到Root模式执行,VMExit开销是比较大的。VMM执行完成后,可执行VMLANCH或VMRESUME指令触发VM Entry切换到Non-root模式,系统自动加载GuestOS运行。

VMX定义了VMCS(Virtual Machine Control Structure)数据结构来记录vCPU相关的寄存器内容与控制信息,发生VMExit或VMEntry时需要查询和更新VMCS。VMM为每个vCPU维护一个VMCS,大小不超过4KB,存储在内存中VMCS区域,通过VMCS指针进行管理。VMCS主要包括3部分信息,control data主要保存触发模式切换的事件及原因;Guest state 保存Guest运行时状态,在VM Entry时加载;Host state保存VMM运行时状态,在VM Exit时加载。通过读写VMCS结构对Guest进行控制。